6 | 您所在的位置:网站首页 › 6 1 单链表结点删除 › 6 |
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。 函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。 裁判测试程序样例: #include #include struct ListNode { int data; struct ListNode *next; }; struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m ); void printlist( struct ListNode *L ) { struct ListNode *p = L; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { int m; struct ListNode *L = readlist(); scanf("%d", &m); L = deletem(L, m); printlist(L); return 0; }/* 你的代码将被嵌在这里 */ 输入样例: 10 11 10 12 10 -1 10 输出样例: 11 12 struct ListNode *readlist(){ struct ListNode *p,*head,*tail; head=NULL; int score; while(1){ p=(struct ListNode *)malloc(sizeof(struct ListNode )); scanf("%d",&score); if(score==-1) break; p->data=score; p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; } return head; } struct ListNode *deletem( struct ListNode *head, int min ){ struct ListNode * p1,* p2; while(head!=NULL&&head->data==min){ p2=head; head=head->next; free(p2); } if(head==NULL) return NULL; p1=head; p2=head->next; while(p2!=NULL){ if(p2->data==min){ p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; } return head; } |
CopyRight 2018-2019 实验室设备网 版权所有 |